📘 Clase 05: Embeddings y Representación Vectorial Semántica
- :material-bookmark: Curso: Curso 3: Creación y Desarrollo de Agentes de IA (CLASE 05)
- :material-signal-cellular-outline: Nivel:
Nivel 3 - Avanzado - :material-lightbulb-on: Metáfora Central: «El Mapa de Constelaciones Semánticas (Vectores en el Hiperespacio)»
- :material-laptop: Wisrovi Studio (Local): 🚀 Abrir Reto • 👨🏫 Modo Tutor
- :material-file-pdf-box: Manual PDF Oficial: Descargar clase-05-embeddings-y-bases-vectoriales.pdf
1. 💡 Fundamentación Teórica y Modelo Mental
Transformación de conceptos textuales en vectores numéricos densos de alta dimensión: 1. Espacio Vectorial: Textos con significados similares tienen menor distancia angular en el espacio. 2. Similitud del Coseno: $\text{Similitud}(A, B) = \frac{A \cdot B}{|A| |B|} = \frac{\sum A_i B_i}{\sqrt{\sum A_i^2} \sqrt{\sum B_i^2}}$. 3. Bases de Datos Vectoriales: Indexación ANN (Approximate Nearest Neighbors) para búsqueda semántica masiva.
🌟 Modelo Mental de la Sesión: «El Mapa de Constelaciones Semánticas (Vectores en el Hiperespacio)»
En esta sesión anclamos el aprendizaje en la metáfora del mundo real para visualizar cómo fluyen las estructuras de datos y el flujo de ejecución en la memoria.
2. 🗺️ Arquitectura de Ejecución y Diagrama de Flujo
flowchart LR
A["📄 Doc A: 'Perro' [0.8, 0.2]"] --> B["📐 Similitud Coseno"]
C["📄 Doc B: 'Cachorro' [0.78, 0.22]"] --> B
B --> D["🎯 Similitud: 0.99 (Alta Proximidad)"]
style A fill:#1e293b,color:#ffffff,stroke:#3b82f6,stroke-width:2px
style C fill:#1e293b,color:#ffffff,stroke:#3b82f6,stroke-width:2px
style B fill:#d97706,color:#ffffff,stroke:#fbbf24,stroke-width:2px
style D fill:#059669,color:#ffffff,stroke:#34d399,stroke-width:2px
3. 💻 Código de Implementación Práctica
```python import math
def cos_sim(v1, v2): dot = sum(a * b for a, b in zip(v1, v2)) norm1 = math.sqrt(sum(a * a for a in v1)) norm2 = math.sqrt(sum(b * b for b in v2)) return dot / (norm1 * norm2)
print("Similitud ortogonal:", cos_sim([1, 0], [0, 1])) print("Similitud paralela:", cos_sim([1, 2], [2, 4])) ```
```python vA = [0.5, 0.5, 0.5]
vB = [0.5, 0.5, 0.5] print("Mismo vector -> Similitud:", sum(a*b for a,b in zip(vA, vB))) ```
4. 🛡️ Buenas Prácticas PEP 8: Antipatrones vs Código Pythonic
⚠️ Cuidado con los Antipatrones
5. 🏋️ Desafío Práctico de la Clase
🎯 Enunciado del Reto
Crea una función similitud_coseno(v1: list[float], v2: list[float]) -> float que calcule y retorne la similitud del coseno entre dos vectores numéricos de igual dimensión.
⚡ Resolución Híbrida en 1 Clic (Local + Web)
Si tienes ejecutando wisrovi ui en tu terminal local, puedes 🚀 Abrir este Reto directamente en tu Studio Local (127.0.0.1:8501) para escribir tu código con auto-formateo AST, inspeccionar variables en el Heap/Stack y evaluarlo con pruebas en tiempo real.
```python import math
def similitud_coseno(v1: list[float], v2: list[float]) -> float: # ✍️ Calcula (v1 . v2) / (||v1|| * ||v2||) if len(v1) != len(v2) or not v1: return 0.0 dot = sum(a * b for a, b in zip(v1, v2)) norm1 = math.sqrt(sum(a * a for a in v1)) norm2 = math.sqrt(sum(b * b for b in v2)) if norm1 == 0 or norm2 == 0: return 0.0 return float(dot / (norm1 * norm2))
```
💡 Pista Socrática 1
💡 Pista 1: Calcula el producto escalar dot = sum(a * b for a, b in zip(v1, v2)).
💡 Pista Socrática 2
💡 Pista 2: Calcula las normas euclidianas con math.sqrt(sum(x * x for x in v)).
💡 Pista Socrática 3
💡 Pista 3: Retorna dot / (norm1 * norm2) controlando división por cero.
Para resolver este ejercicio en tu entorno:
1. Abre el archivo ejercicios/reto.py de esta clase en Visual Studio Code o utiliza wisrovi ui / wisrovi tutor.
2. Implementa tu solución cumpliendo los requisitos y contratos de tipado.
3. Valida tus resultados ejecutando las pruebas unitarias: